from fastapi import FastAPI, UploadFile
from starlette.middleware.cors import CORSMiddleware

# from pydantic import BaseModel
# from typing import Optional
from Types.index import Data, Response
import uvicorn
from utils.handleExcel import read_excel

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    # 允许跨域的源列表，例如 ["http://www.example.org"] 等等，["*"] 表示允许任何源
    allow_origins=["*"],
    # 跨域请求是否支持 cookie，默认是 False，如果为 True，allow_origins 必须为具体的源，不可以是 ["*"]
    allow_credentials=False,
    # 允许跨域请求的 HTTP 方法列表，默认是 ["GET"]
    allow_methods=["*"],
    # 允许跨域请求的 HTTP 请求头列表，默认是 []，可以使用 ["*"] 表示允许所有的请求头
    # 当然 Accept、Accept-Language、Content-Language 以及 Content-Type 总之被允许的
    allow_headers=["*"],
    # 可以被浏览器访问的响应头, 默认是 []，一般很少指定
    # expose_headers=["*"]
    # 设定浏览器缓存 CORS 响应的最长时间，单位是秒。默认为 600，一般也很少指定
    # max_age=1000
)


@app.get('/')
async def get_test():
    return {'message': 'Hello World'}


@app.post('/api/file', description="读取上传的excel文件")
async def upload_file(file: UploadFile) -> Response:
    """
    :param file:
    :return:
    """
    contends = await file.read()
    # 读取文件的后缀
    suffix = file.filename.split('.')[-1]
    if suffix == 'xlsx' or suffix == 'xls':
        # DONE: 读取excel文件
        try:
            data = read_excel(contends)
            response_data = {'message': '读取excel文件成功', 'success': True,
                             'data': data}
        except:
            response_data = {'message': '读取excel文件失败', 'success': False, 'data': []}
    else:
        response_data = {'message': '请上传xlsx/xls文件', 'success': False, 'data': []}
    return Response(**response_data)


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=3001)
